<!--
 * @Author: weidewei
 * @Date: 2025-10-27 18:13:37
 * @LastEditors: weidewei
 * @LastEditTime: 2025-10-28 09:42:18
 * @Description: 
 * @FilePath: \2025-front-face\review-knowledge\20251027\复习new操作符.html
-->
<script>
    // new 操作符做了什么：
    // 1 新建一个空对象 
    // 2 将空对象的原型指向构造函数的原型 
    // 3 改变this的指向 
    // 4 执行构造函数内部的代码。
    // 5 如果构造函数返回一个对象，则返回该对象；否则，返回新创建的对象。

    function testNew(name,color) {
      this.name = name;
      this.color = color;  
      return {
        name: 'banana',
        color: 'blue'
      }
    }

    function construtorTest(name,age) {
        this.name = name;
        this.age = age;
        // return {
        //     name: 'cao',
        //     age: 222
        // }
        return 222;
    }

    function myNew(construtorFn,...args) {
       let obj = {};
       Object.setPrototypeOf(obj,construtorFn.prototype); 
       let res = construtorFn.apply(obj,args);
       return typeof res === 'object' ? res : obj;

    }

    // const t = new testNew('apple','red');
    const t = myNew(construtorTest,'bob',18);
    console.log('t',t)


</script>